package io.aicn.lowcode.service.dbmanager;

import com.baomidou.mybatisplus.extension.service.IService;
import io.aicn.lowcode.entity.dbmanager.DataTable;

import java.util.List;

/**
 * 数据表信息Service接口
 * 
 * @author lowcode-generator
 * @since 2025-01-25
 */
public interface IDataTableService extends IService<DataTable> {

    /**
     * 根据数据源ID查询表列表
     * 
     * @param dataSourceId 数据源ID
     * @return 数据表列表
     */
    List<DataTable> listByDataSourceId(Long dataSourceId);

    /**
     * 根据数据源ID和数据库名查询表列表
     * 
     * @param datasourceId 数据源ID
     * @param databaseName 数据库名
     * @return 数据表列表
     */
    List<DataTable> listByDatasourceAndDatabase(Long datasourceId, String databaseName);

    /**
     * 根据表名模糊查询
     * 
     * @param datasourceId 数据源ID
     * @param tableName 表名
     * @return 数据表列表
     */
    List<DataTable> listByTableNameLike(Long datasourceId, String tableName);

    /**
     * 统计数据源下的表数量
     * 
     * @param datasourceId 数据源ID
     * @return 表数量
     */
    int countByDatasourceId(Long datasourceId);

    /**
     * 查询数据源下的数据库列表
     * 
     * @param datasourceId 数据源ID
     * @return 数据库名列表
     */
    List<String> listDatabasesByDatasourceId(Long datasourceId);

    /**
     * 从数据源同步表结构信息
     * 
     * @param datasourceId 数据源ID
     * @param databaseName 数据库名（可选，为空则同步所有数据库）
     * @return 同步结果
     */
    String syncTablesFromDataSource(Long datasourceId, String databaseName);

    /**
     * 刷新数据表统计信息
     * 
     * @param tableId 数据表ID
     * @return 刷新结果
     */
    boolean refreshTableStats(Long tableId);

    /**
     * 同步表结构
     * @param tableId 表ID
     * @return 是否成功
     */
    boolean syncTableStructure(Long tableId);

    /**
     * 批量刷新数据源下所有表的统计信息
     * 
     * @param datasourceId 数据源ID
     * @return 刷新结果统计
     */
    String refreshAllTableStats(Long datasourceId);
}